package service

import (
	"gitee.com/gopher2011/mall/app/dao"
	"time"
)

// 全局公开对象
var UmsRole = umsRoleService{}

// 私有对象，所有的方法都绑定到这个结构体上。
// 用户角色表
type umsRoleService struct{}

func (p *umsRoleService) Create(it *dao.UmsRole) (int64, error) {
	it.CreateTime = time.Now()
	insert, err := dao.UmsRoleDao.Insert(*it)
	if err != nil {
		return 0, err
	}
	return insert, nil
}

// 根据传入的 id，更新 UmsRole
func (p *umsRoleService) Update(id int64, it *dao.UmsRole) (int64, error) {
	it.Id = id
	insert, err := dao.UmsRoleDao.UpdateByPrimaryKey(*it)
	if err != nil {
		return 0, err
	}
	return insert, nil
}

// 根据传入的 id，更新 UmsRole
func (p *umsRoleService) Delete(ids []int64) (int64, error) {
	// 如果之前的代码里设置了缓存，应该先清空缓存 方法为: delResourceListByRoleIds(ids)
	return dao.UmsRoleDao.DeleteByExample(ids)
}

func (p *umsRoleService) ListAll() ([]dao.UmsRole, error) {
	// 如果之前的代码里设置了缓存，应该先清空缓存 方法为: delResourceListByRoleIds(ids)
	return dao.UmsRoleDao.SelectByExample()
}

func (p *umsRoleService) List(l dao.UmsRoleList) ([]dao.UmsRole, error) {
	l.PageNum = (l.PageNum - 1) * l.PageSize
	return dao.UmsRoleDao.List(l)
}

func (p *umsRoleService) UpdateStatus(id int64, status int32) (int64, error) {
	ua := dao.UmsRole{
		Id:     id,
		Status: status,
	}
	return dao.UmsRoleDao.UpdateByPrimaryKey(ua)
}

func (p *umsRoleService) ListMenu(roleId int64) (dao.UmsMenu, error) {
	return dao.UmsRoleDao.GetMenuListByRoleId(roleId)
}

func (p *umsRoleService) ListResource(roleId int64) (dao.UmsResource, error) {
	return dao.UmsRoleDao.GetResourceListByRoleId(roleId)
}

func (p *umsRoleService) AllocMenu(r *dao.UmsRoleAllocMenu) (int64, error) {
	//先删除原有关系
	id, err := dao.UmsRoleMenuRelationDao.DeleteByRoleId(r.RoleId)
	if err != nil {
		return id, err
	}
	//批量插入新关系
	res, err := dao.UmsRoleMenuRelationDao.Insert(*r)
	if err != nil {
		return 0, err
	}
	// 如果之前设置了缓存，此时则删除缓存,方法为: delResourceListByRole(r.RoleId)
	return res, nil
}

func (p *umsRoleService) AllocResource(r *dao.UmsRoleAllocResource) (int64, error) {
	//先删除原有关系
	id, err := dao.UmsRoleResourceRelationDao.DeleteByRoleId(r.RoleId)
	if err != nil {
		return id, err
	}
	//批量插入新关系
	res, err := dao.UmsRoleResourceRelationDao.Insert(*r)
	if err != nil {
		return 0, err
	}
	// 如果之前设置了缓存，此时则删除缓存,方法为: delResourceListByRole(r.RoleId)
	return res, nil
}
